package  
{
	import br.com.stimuli.loading.BulkLoader;
	import br.com.stimuli.loading.BulkProgressEvent;
	import flash.display.Bitmap;
	import flash.display.DisplayObject;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.display.Loader;
	import flash.net.URLRequest;
	import vk.APIConnection;
	
	/**
	 Класс, содержащий данные, которые были загруженны с ВКонтакта.
	 */
	public class VKData extends EventDispatcher
	{
		public static var VKDATA_LOADED:String = "vkDataLoaded";
		public static var VKDATA_FAIL:String = "vkDataFail";
				
		/* Общие данные */
		public var uid:String;
		public var firstName:String;
		public var lastName:String;
		public var nickName:String;
		public var sex:String;
		public var country:String;
		public var city:String;
		
		/* Фото */
		public var urlPhoto:String;
		public var urlPhotoMedium:String;
		public var urlPhotoBig:String;
		public var photo:Bitmap;
		public var photoMedium:Bitmap;
		public var photoBig:Bitmap;
		
		/* Связанные данные */
		public var Friends:Array;
		public var Groups:Array;
		
		/* Конструктор принимает набор параметров для инициализации соединения, 
		 * а так же метод, в который отправится */
		public function VKData(flashVars:Object) 
		{
			var VK:APIConnection = new APIConnection(flashVars);
			/* Вызываем метод getProfiles, возвращающий данные пользователя с uids */
			var loadFields:Array = ["photo", "photo_medium", "photo_big", "nickname", "sex", "city", "country"];
			trace("VKData>>> loadFields: "+loadFields.toString());
			VK.api("getProfiles", { uids:flashVars["viewer_id"], fields:loadFields.toString() }, getUserData_Complete, getUserData_Fail);
		}
		
		/* Обработка ошибки загрузки данных */
		private function getUserData_Fail(data:Object):void
		{
			dispatchEvent(new Event(VKData.VKDATA_FAIL));
		}
		
		/* Обработка загруженных данных */
		private function getUserData_Complete(data:Object):void
		{
			/* Заполнение структуры */
			var userInfo:Object = data[0];
			uid = userInfo["uid"];
			firstName = userInfo["first_name"];
			lastName = userInfo["last_name"];
			nickName = userInfo["nickname"];
			sex = userInfo["sex"];
			country = userInfo["country"];
			city = userInfo["city"];
			urlPhoto = userInfo["photo"];
			urlPhotoMedium = userInfo["photo_medium"];
			urlPhotoBig = userInfo["photo_big"];
			
			InitBulkLoader();
		}
		
		/* Загрузка контента ВК */
		private function InitBulkLoader():void
		{
			/* Загрузка фото пользователя */
			var bulkLoader:BulkLoader = new BulkLoader("VKContent");
			bulkLoader.addEventListener(BulkLoader.COMPLETE, bulkLoaderListener_Complete);
			bulkLoader.addEventListener(BulkLoader.PROGRESS, bulkLoaderListener_Progress);
			bulkLoader.logLevel = BulkLoader.LOG_ERRORS;
			//trace("urlPhoto:"+urlPhoto+"\nurlPhotoMedium:"+urlPhotoMedium+"\nurlPhotoBig:"+urlPhotoBig);
			bulkLoader.add(urlPhoto, { id:"photo" } );
			bulkLoader.add(urlPhotoMedium, { id:"photo_medium" } );
			bulkLoader.add(urlPhotoBig, { id:"photo_big" } );
			bulkLoader.start();
		}
		
		/* Обработка процесса загрузки контента ВК */
		private function bulkLoaderListener_Progress(e: BulkProgressEvent):void
		{
			
		}
		
		/* Обработка завершения загрузки контента ВК */
		private function bulkLoaderListener_Complete(e:Event):void
		{
			var bulkLoader:BulkLoader = e.target as BulkLoader;
			photo = bulkLoader.getBitmap("photo");
			photoMedium = bulkLoader.getBitmap("photo_medium");
			photoBig = bulkLoader.getBitmap("photo_big");
			/* Это последняя стадия загрузки данных VK. 
			 * Выбрасываем соответствующее событие */
			dispatchEvent(new Event(VKData.VKDATA_LOADED));
		}
	}

}